export default {
  namespaced: true,
  state() {
    return {
      // 购物车的商品数据数组
      carItems: JSON.parse(uni.getStorageSync("cart") || "[]"),
    };
  },
  getters: {
    // 1. 购物车商品总数量
    total(state) {
      return state.carItems.reduce((sum, item) => sum + item.goods_count, 0);
    },
    // 2. 计算已经勾选商品的总数量
    checkedTotal(state) {
      let count = 0;
      state.carItems.forEach((item) => {
        if (item.goods_state) {
          count += item.goods_count;
        }
      });
      return count;
    },
    // 3. 计算已经勾选商品的总价格
    checkedAmount(state) {
      let count = 0;
      state.carItems.forEach((item) => {
        if (item.goods_state) {
          count += item.goods_count * item.goods_price;
        }
      });
      return count.toFixed(2);
    },
  },
  mutations: {
    // 1. 添加商品到购物车
    addToCart(state, goods) {
      const someGoods = state.carItems.find(
        (item) => item.goods_id === goods.goods_id
      );
      // 如果购物车中有同样的商品, 则购买数量+1
      if (someGoods) {
        someGoods.goods_count++;
      } else {
        // 如果购物车中没有同样的商品, 则把该商品加入到购物车
        state.carItems.push(goods);
      }

      // 把购物车中的商品往本地存储
      uni.setStorageSync("cart", JSON.stringify(state.carItems));
    },
    // 2. 修改购物车中单个商品的选中状态
    updateState(state, goods) {
      // 2.1 根据商品的id去找到数组中的商品对象
      const someGoods = state.carItems.find(
        (item) => item.goods_id === goods.goods_id
      );
      if (someGoods) {
        someGoods.goods_state = !someGoods.goods_state;
        // 把购物车中的商品往本地存储
        uni.setStorageSync("cart", JSON.stringify(state.carItems));
      }
    },
    // 3. 修改购物车中单个商品的购买数量
    updateCount(state, { goods, num }) {
      const someGoods = state.carItems.find(
        (item) => item.goods_id === goods.goods_id
      );
      if (someGoods) {
        someGoods.goods_count = num;
        // 把购物车中的商品往本地存储
        uni.setStorageSync("cart", JSON.stringify(state.carItems));
      }
    },
    // 4. 删除一个商品
    removeGoods(state, goods) {
      console.log(goods);
      state.carItems = state.carItems.filter(
        (item) => item.goods_id !== goods.goods_id
      );
      // 把购物车中的商品往本地存储
      uni.setStorageSync("cart", JSON.stringify(state.carItems));
    },
    // 5. 更新商品的勾选状态
    updateAllGoodsState(state, flag) {
      state.carItems.forEach((item) => (item.goods_state = flag));
      // 把购物车中的商品往本地存储
      uni.setStorageSync("cart", JSON.stringify(state.carItems));
    },
  },
  actions: {},
};
